package com.ylx.web.p;

import com.ylx.pojo.Cart;
import com.ylx.pojo.CartItem;
import com.ylx.pojo.Goods;
import com.ylx.service.GoodsService;
import com.ylx.service.GoodsServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Map;

@WebServlet("/addCartServlet")
public class AddCartServlet extends HttpServlet {
    private GoodsService goodsService=new GoodsServiceImpl();
    protected void doGet (HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //页面提交了 pid商品编号 buyNum商品购买数量两个参数过来
        String id = request.getParameter("id");
        String buyNum1 = request.getParameter("buyNum");
        int buyNum=Integer.parseInt(buyNum1);



        //获取要添加进购物车的商品信息 pid
        //调用根据商品编号获取商品信息
        Goods goods = goodsService.getProductsById1(id);
        //这里大家需要思考 我如何实现商品重复购买 还有就是购物原来就有商品不覆盖它的这个问题
        //首先判断session中原来有没有session对象 有就取出原来的session中的购物车 没有另外创建
        //有购物车 就向购物车里面放商品
        // 没有购物车就先去拉购物车
        HttpSession session = request.getSession();
        //先去session中获取购物车
        Cart cart = (Cart)session.getAttribute("cart");
        //取出购物车对象以后 判断session中的购物车对象是否为空
        if (cart == null) {
            //因为第一个访问 session中的购物车对象 他铁定是空的  null
            //如果从session中取出的购物车对象为空 就是没有购物车 那么我们就创建购物车对象
            // 没有购物车就先去拉购物车
            cart = new Cart();
        }

        //有购物车 就向购物车里面放商品
        //创建多一个购物车明细对象
        CartItem cartItem = new CartItem();

        //将购买的商品信息和数量放入购物车明细对象里面去
        cartItem.setGoods(goods);
        cartItem.setBuyNum(buyNum);

        //一个购物车可能有购买多个商品 购物车跟购物车明细之间的关系是一对多
        //这里我们需要使用Map容器来实现一对多的关系  来存放多的数据
        Map<String, CartItem> CartItem = cart.getCartItems();
        //TODO 如果要实现商品 原来买了一台iPhone 后面又买了一台iPhone 应该显示两台
        // TODO 原来买过iPhone就 1+1 = 2

        //将商品明细存入容器中 实现一个购物车多个商品的这个方案
        CartItem.put(id, cartItem);
        //将这个多个商品的明细 放入购物车中
        cart.setCartItems(CartItem);

        //将购物车对象放入session中 cart
        session.setAttribute("cart", cart);

        //将页面跳转到购物车页面
        response.sendRedirect("front/cart.jsp");
    }

    protected void doPost (HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        this.doGet(request, response);

    }
}